package com.example.mall.service;

import com.example.mall.api.mall.param.SaveCartItemParam;
import com.example.mall.api.mall.param.UpdateCartItemParam;
import com.example.mall.api.mall.vo.MallShoppingCartItemVO;
import com.example.mall.entity.MallShoppingCartItem;
import com.example.mall.util.PageQueryUtil;
import com.example.mall.util.PageResult;

import java.util.List;

public interface MallShoppingCartService {

    /**
     * 保存商品至购物车中
     *
     * @param saveCartItemParam 添加购物项参数（商品id和数量）
     * @param userId 用户id
     * @return 枚举结果
     */
    String saveMallCartItem(SaveCartItemParam saveCartItemParam, Long userId);

    /**
     * 修改购物车中的属性
     *
     * @param updateCartItemParam 修改购物项参数（购物项id和商品数量）
     * @param userId 用户id
     * @return 枚举结果
     */
    String updateMallCartItem(UpdateCartItemParam updateCartItemParam, Long userId);

    /**
     * 获取购物项详情
     *
     * @param mallShoppingCartItemId 购物项id
     * @return 购物购物项详情
     */
    MallShoppingCartItem getMallCartItemById(Long mallShoppingCartItemId);

    /**
     * 删除购物车中的商品
     *
     * @param shoppingCartItemId 购物项id
     * @param userId 用户id
     * @return 布尔值
     */
    Boolean deleteById(Long shoppingCartItemId, Long userId);

    /**
     * 获取我的购物车中的列表数据
     *
     * @param mallUserId 用户id
     * @return 页面购物项详情列表（也就是与页面展示相对应的对象）
     */
    List<MallShoppingCartItemVO> getMyShoppingCartItems(Long mallUserId);

    /**
     * 根据userId和cartItemIds获取对应的购物项记录
     *
     * @param cartItemIds 购物项id集合
     * @param mallUserId 用户id
     * @return 页面购物项详情列表（也就是与页面展示相对应的对象）
     */
    List<MallShoppingCartItemVO> getCartItemsForSettle(List<Long> cartItemIds, Long mallUserId);

    /**
     * 我的购物车(分页数据)
     *
     * @param pageUtil 分页参数工具类
     * @return 分页结果工具类
     */
    PageResult getMyShoppingCartItems(PageQueryUtil pageUtil);
}
